<?php
namespace Admin\Controller;
use Think\Controller;
require_once ROOT . "/Common/ColoudSearch/CloudsearchClient.php";
require_once ROOT . "/Common/ColoudSearch/CloudsearchIndex.php";
require_once ROOT . "/Common/ColoudSearch/CloudsearchDoc.php";

class CliController extends Controller {

	public function _initialize() {
		if (!IS_CLI) {
			//$this->show('只允许在命令行下执行');
			//exit(0);
		}
	}

	/**
	 * 增加索引文档
	 * @internal 增加索引文档
	 * @access public
	 * @since 2014-10-18 23:34:46
	 * @author FrankKung <kfanjian@gmail.com>
	 */
	public function addDoc() {
		// 模型
		$Hash = D("Hash");

		// 开放搜索客户端
		$client = new \CloudsearchClient(
			C('CS.ACCESSKEYID'), 
			C('CS.SECRET'), 
			array('host' => C('CS.HOST')),
			C('CS.KEY_TYPE')
		);
		// $app = new \CloudsearchIndex(C('CS.APP_NAME'), $client);

		// 查看当前应用的状态
		// echo $app->status();

		// 获取当前应用的所有错误信息。
		// echo echo $app->getErrorMessage();

		// 获取所有的应用信息
		// echo $app->listIndexes();

		// 文档
		$doc = new \CloudsearchDoc(C('CS.APP_NAME'), $client);

		// 或$doc->update($json), $doc->remove($json)
		// 注意，参数1可以为一个json的string或者为一个数组，
		// 结构为：
		// [{fields:{fieldname1: fieldvalue1, fieldname2: fieldvalue2, ...}, cmd: ADD|DELETE|UPDATE},...]
		// 参数2为您创建要push数据的表名。
		// 如果需要多表的数据push，请先push附表的数据，然后在push主表的数据。
		$map['isIndex'] = '0';
		$total = $total_ok = $total_failed = 0;
		while($ret = $Hash->where($map)->field('id,hash,title,file,keywords,fileSize,fileNumber,time,pageRank,isBad')->find()) {
			//var_dump($ret);
			//foreach ($ret as $k=>$v) {
				$data[] = array(
					'fields'	=> $ret,
					'cmd'		=> 'ADD',
				);
			//}
			$dataMap = array(
				'id' 		=> $ret['id'],
				'hash'		=> $ret['hash'],
			);
			$total++;
			$statusJson = $doc->add($data, 'main');
			$status = json_decode($statusJson, true);
			if (strtolower($status['status']) == 'ok') { // 更新文档成功
				$total_ok++;
			} else {
				$dataUpdate['isIndex'] = '1';
				$Hash->where($dataMap)->save($dataUpdate);
				echo "警告：添加第 $total 条数据失败 - ID: {$ret['id']} - HASH: {$ret['hash']}\n";
				$total_failed++;
			}
			if (($total % 100) == 0) {
				$dataUpdate['isIndex'] = '3';
				$Hash->where($dataMap)->save($dataUpdate);
				echo "报告：累计已处理数据 $total 条 ...\n";
			}
		}
		echo("更新索引完成\r\n");
	}

	/**
	 * 删除所有索引
	 * @internal 删除所有索引
	 * @access public
	 * @since 2014-10-21 17:12:09
	 * @author FrankKung <kfanjian@gmail.com>
	 */
	public function delect() {
		//
	}
}
